ÉcÅ[ÉãÉ{ÉbÉNÉXÇÃà¿ëSÇ»óòópï˚ñ@
Ç≤ë∂Ç∂ÇÃí ÇËÅAMac OS ÇΔÉcÅ[ÉãÉ{ÉbÉNÉX (DZDZǩÇÁÇÕ 2 ǬÇÇ‹ÇΔÇflǃä»íPÇ…ÅuÉcÅ[ÉãÉ{ÉbÉNÉXÅvÇΔåæÇ§Ç±ÇΔDžǵNjÇ∑) ÇÕ 1980 îNë„ÇÃèâÇflÇ…ÅAàÍìxÇ… 1 ǬÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇé¿çsǵÅAǪÇÃÉAÉvÉäÉPÅ[ÉVÉáÉìÇà 1 ǬÇÃÉXÉåÉbÉhǵǩé¿çsÇ≈ǴǻǢÉ}ÉVÉìÇëŒè€Ç…ê›åvÇ≥ÇÍÇΩLJÇÃÇ≈Ç∑ÅBǪÇÍà»å„ëΩè≠ÇÃêiï‡ÇÕdžÇËNjǵÇΩÇ™ÅADZÇÃäÓñ{ìIÇ»ê›åvÇÃêßñÒÇÃÇΩÇflÅAñ¢ÇæÇ…ÉcÅ[ÉãÉ{ÉbÉNÉXÇÕÉVÉìÉOÉãÉXÉåÉbÉhëŒâûÇΔǵǃégǧïKóvǙdžÇËÇ‹Ç∑ÅBMac Ç≈ÇÕï°êîÉAÉvÉäÉPÅ[ÉVÉáÉìä‘ÇÃã¶í≤ìIÉ}ÉãÉ`É^ÉXÉNÇ™â¬î\Ç≈Ç∑Ç™ÅADZÇÍÇÕÅAä˘íËÇÃéûì_ (WaitNextEvent ÇÃåƒÇ—èoǵ) Ç≈ǵǩÉvÉçÉZÉXêÿÇËë÷ǶÇçsǧDZÇΔÇ™Ç≈Ç´Ç∏ÅAâ∫à ÉÅÉÇÉäÇ…ï€éùÇ≥ÇÍÇΩëÂàÊìIèÛë‘ÇäÆëSÇ…ÉXÉèÉbÉvÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅB
DZÇÃÇΩÇflÅAMac OS ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ï°êîÉXÉåÉbÉhÇé¿çsǵÇÊǧÇΔÇ∑ÇÈÇΔñ‚ëËÇ™ãNDZÇËÇ‹Ç∑ÅBÉcÅ[ÉãÉ{ÉbÉNÉXÇÃåƒÇ—èoǵǙçƒì¸â¬î\Ç≈ǻǢÇΔÇÕÅA1 ǬÇÃÉXÉåÉbÉhÇ™ÉcÅ[ÉãÉ{ÉbÉNÉXåƒÇ—èoǵÇé¿çsǵǃǢÇÈä‘ÇÕëºÇÃÉXÉåÉbÉhÇ™ÉcÅ[ÉãÉ{ÉbÉNÉXÇ…ì¸ÇÍǻǢÇΔǢǧà”ñ°Ç≈Ç∑ÅBÇ≥ÇÁÇ…ÅAëSî ìIÇ…ëÂàÊìIèÛë‘ (åªç›Çà GrafPort Ç‚ÉäÉ\Å[ÉXÉ`ÉFÅ[Éìǻǫ) Ç™égópÇ≥ÇÍǃǢÇÈÇΩÇflÅAǪÇÃèÛë‘Ç…àÀë∂Ç∑ÇÈàÍòAÇÃåƒÇ—èoǵÇçsǧïKóvÇÃdžÇÈÉXÉåÉbÉhÇÕÅAǪÇÃä‘ÅAëºÇÃÉXÉåÉbÉhǙǪÇÃèÛë‘ÇóòópǵÇΩÇËïœçXÇ∑ÇÈÇÃÇñhÇÆïKóvǙdžÇËÇ‹Ç∑ÅB
ÇÌÇÍÇÌÇÍÇÕ MRJ 2.1 óp AWT ÇÃé¿ëïÇ≈DZÇÃñ‚ëËÇ…ëŒèàǵǻÇ≠ǃÇÕÇ»ÇËÇ‹ÇπÇÒÇ≈ǵÇΩÅBAWT ÇÃëÂïîï™Ç™ÅAJDirect2 Çí Ç∂ǃÉcÅ[ÉãÉ{ÉbÉNÉXÇåƒÇ—èoÇ∑ Java ÇÃÉRÅ[ÉhÇ≈èëÇ©ÇÍǃǢÇΩÇΩÇflÇ≈Ç∑ÅBÇÌÇÍÇÌÇÍÇÃéÊÇ¡ÇΩâåàçÙÇÕÇ≤Ç≠ìñÇΩÇËëOÇÃÅuÉNÉäÉeÉBÉJÉãÉZÉNÉVÉáÉìÅvÇégópÇ∑ÇÈLJÇÃÇ≈ÅAÉcÅ[ÉãÉ{ÉbÉNÉXÇégópÇ∑ÇÈÉRÅ[Éhïîï™ÇÉNÉäÉeÉBÉJÉãÉZÉNÉVÉáÉìÇΔǵÅAàÍéûÇ… 1 ǬÇÃÉXÉåÉbÉhÇæÇØÇµÇ©ÇªÇÃÉZÉNÉVÉáÉìÇ…ì¸ÇÍǻǢÇÊǧDžÇ∑ÇÈÇΔǢǧLJÇÃÇ≈Ç∑ÅB
Java ÇÃópåÍÇ≈ǢǧÇΔÅADZÇÃñ‚ëËÇÕëÂàÊÉIÉuÉWÉFÉNÉg (public Ç®ÇÊÇ— static Ç»ïœêîÇí ǵǃÉAÉNÉZÉXÇ∑ÇÈ) Ç 1 å¬ópà”ǵǃÅADZÇÍÇìØä˙ÇÃÇΩÇflÇÃÉçÉbÉNÇΔǵǃì≠Ç©ÇπÇÈDZÇΔÇ≈é¿åªÇµÇ‹Ç∑ÅBÇÌÇÍÇÌÇÍÇÕÇ∑Ç◊ǃÇÃÉNÉäÉeÉBÉJÉãÉZÉNÉVÉáÉìÇǪÇÃÉIÉuÉWÉFÉNÉgÇ≈ìØä˙ÇéÊÇÈ Java ÉuÉçÉbÉNÇ…ì¸ÇÍÇÈDZÇΔÇ≈ëŒèàǵNjǵÇΩÅBǪÇÃÉIÉuÉWÉFÉNÉgÇΔÇÕéüÇÃLJÇÃÇ≈Ç∑ÅB
com.apple.mrj.macos.toolbox.Toolbox.LOCK
(DZÇÍÇÕÅAcom.apple.mrj.macos.toolbox ÉpÉbÉPÅ[ÉWÇà Toolbox ÉNÉâÉXÇà LOCK ÇΔǢǧñºëOÇà static Ç≈ final Ç»ïœêîÇ≈Ç∑ÅB) DZÇÃïœêîÇÃégÇ¢ï˚ÇÕÅAìKêÿÇ»ÉCÉìÉ|Å[ÉgñΩóflǙdžÇÈLJÇÃÇΔâºíËÇ∑ÇÈÇΔÅAéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB
synchronized( Toolbox.LOCK ) {
...
}
ÇÌÇÍÇÌÇÍ MRJ É`Å[ÉÄÇÕDZÇÃDZÇΔÇÅuLOCKing (LOCK Ç∑ÇÈ)ÅvÇΔÇ©Åuusing the LOCK (LOCK Çégǧ)ÅvÇΔåƒÇÒÇ≈ǢNjÇ∑ÅB(âpåÍÇ≈î≠âπÇ∑ÇÈÇΔÇ´ÇÕÅuLOCKÅvÇÃïîï™ÇǪÇÍÇ™ëÂï∂éöÇ≈džÇÈDZÇΔÇ™ÇÌÇ©ÇÈÇÊǧã≠Ç≠åæÇ¢Ç‹Ç∑ÅB)
Ç»Ç∫DZÇÍÇ™ïKóvÇ©
ÇÌÇÍÇÌÇÍÇÕ AWT ǪÇÃLJÇÃÇê≥èÌÇ…ìÆçÏÇ≥ÇπÇÈÇΩÇflDžDZÇÃï˚ñ@ÇçÃópǵNjǵÇΩÅBǵǩǵÅAëºÇÃÉfÉxÉçÉbÉpÇ™ JDirect ÇégǧÉRÅ[ÉhÇèëÇ´ (ì«é“ÇÃëÂîºÇ™ÇªÇ§Ç≈ǵÇÂǧ)ÅAǪÇÃÉRÅ[ÉhÇÅAìØéûÇ… AWT LJégópÇ∑ÇÈÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈égópÇ∑ÇÈèÍçáÅAìØÇ∂ìØä˙ÉeÉNÉjÉbÉNÇégǡǃÅAì«é“ÇÃÉRÅ[ÉhÇΔÉAÉbÉvÉãÇÃÉRÅ[ÉhÇÃä±è¬ÇñhÇÆïKóvǙdžÇËÇ‹Ç∑ÅBDZÇÃÇÊǧǻóùóRÇ≈ÅADZÇÃÉeÉNÉjÉJÉãÉmÅ[ÉgÇçÏê¨ÇµÇ‹ÇµÇΩÅB
ÉTÉìÉvÉã
äÆëSÇ…ìØä˙ÇÃéÊÇÍÇΩ SysBeep Ç÷ÇÃåƒÇ—èoǵÇçsǧä»íPÇ»ÉTÉìÉvÉãÇåfç⁄ǵNjÇ∑ÅB
import com.apple.mrj.macos.toolbox.Toolbox;
import SoundFunctions; // SDK Çà JDirect ÉTÉìÉvÉãÉRÅ[ÉhÇÊÇË
...
public void playABeep( ) {
synchronized(Toolbox.LOCK) {
SoundFunctions.SysBeep(1);
}
}
|
ÉlÉCÉeÉBÉuÉRÅ[Éh (JNI)
DZÇÍÇÕ JDirect ÇæÇØÇÃñ‚ëËÇ≈ÇÕdžÇËÇ‹ÇπÇÒÅBÉlÉCÉeÉBÉuÉÅÉ\ÉbÉhÇçÏê¨ÇµÇƒ (ǮǪÇÁÇ≠ JNI Çégópǵǃ) ÉcÅ[ÉãÉ{ÉbÉNÉXÇÃåƒÇ—èoǵÇçsǧèÍçáÅAìØÇ∂ñ‚ëËÇ™ãNDZÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBÉlÉCÉeÉBÉuÉRÅ[ÉhÇ≈ÅAåªç›ÇÃÉ|Å[ÉgÇ‚ GrafPort ÇÃì‡ïîèÛë‘ǻǫÅAÉcÅ[ÉãÉ{ÉbÉNÉXÇÃèÛë‘ÇïœÇ¶ÇÈèÍçáÅAǪÇÃìÆçÏÇÕ LOCK Ç≈ìØä˙ÇéÊÇÁÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBàÍî‘ä»íPÇ»ï˚ñ@ÇÕÅAÉlÉCÉeÉBÉuÉRÅ[ÉhÇÕǪÇÃNjNjDžǵǃÅAÉlÉCÉeÉBÉuÉÅÉ\ÉbÉhÇåƒÇ—èoǵǃǢÇÈÇΔDZÇÎÇÇ∑Ç◊ǃïKÇ∏ LOCK Ç∑ÇÈDZÇΔÇ≈Ç∑ÅBǵǩǵÅAJNI API Ç≈ LOCK ÉIÉuÉWÉFÉNÉgÇéÊìæÇµÅAÉÇÉjÉ^ÇéÊìæ/âï˙Ç∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBDZÇÃèÍçáÅAÉlÉCÉeÉBÉuÉÅÉ\ÉbÉhÇ©ÇÁî≤ÇØÇÈëOÇ…ïKÇ∏ÉÇÉjÉ^Çâï˙Ç∑ÇÈÇÊǧÇ≠ÇÍÇÆÇÍLJíçà”ǵǃÇ≠ÇæÇ≥Ç¢ÅBDZÇÍÇë”ÇÈÇΔ MRJ Ç™ÉnÉìÉOǵNjÇ∑ÅB
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
åªé¿ìIÇ»ëŒâûï˚ñ@
é¿ç€ÇÕÅAè„ãLÇÃåxçêÇÕåªéûì_Ç≈ÇÕåµÇµÇ∑ǨNjÇ∑ÅBñ{ìñÇÕÅAç°ÇÃÇΔDZÇÎÉcÅ[ÉãÉ{ÉbÉNÉXÇ÷ÇÃåƒÇ—èoÇµÇ 1 ǬécÇÁÇ∏ LOCK Ç∑ÇÈïKóvÇÕdžÇËÇ‹ÇπÇÒÅBÇ≥ǡǴÇà SysBeep ÇÃÇÊǧDžÅAÉVÉXÉeÉÄÇÃèÛë‘ïœçXÇãÅÇflÇ∏çsǢLJǵǻǢåƒÇ—èoǵÇÕåªç›ÇÃÇΔDZÇÎìØä˙ÇïKóvÇΔǵNjÇπÇÒÅBDZÇÍÇÕÅAMRJ 2.1 ÇÃÉXÉåÉbÉhÇ™ñ{óàÇÃà”ñ°Ç≈ÉvÉäÉGÉìÉvÉeÉBÉuÇ≈Ç»Ç≠ÅAJava ÉRÅ[ÉhÇÃÇ›ÇÉ^ÉCÉÄÉXÉâÉCÉXǵǃÅAǪǧå©ÇπÇ©ÇØÇƒÇ¢ÇÈÇæÇØÇæÇ©ÇÁÇ≈Ç∑ÅBÉcÅ[ÉãÉ{ÉbÉNÉXÇä‹ÇflÅAÉlÉCÉeÉBÉuÉRÅ[ÉhÇÃé¿çsÇÕÉvÉäÉGÉìÉvÉeÉBÉuÇ…Ç»ÇËÇ‹ÇπÇÒÅBÉcÅ[ÉãÉ{ÉbÉNÉXÇ÷ÇÃåƒÇ—èoǵÇÕÇ«ÇÍLJïKóvÇ»ÇæÇØç≈å„Ç‹Ç≈é¿çsÇ≥ÇÍÇ‹Ç∑ÅBëºÇà Java ÉXÉåÉbÉhÇ™äÑÇËçûÇfiDZÇΔÇÕÇ»Ç≠ÅAï ÇÃÉXÉåÉbÉhÇ…ÇÊÇÈÉcÅ[ÉãÉ{ÉbÉNÉXÇ÷ÇÃçƒì¸ÇÃäÎåØÇÕdžÇËÇ‹ÇπÇÒÅB
ǵǩǵÅADZDZÇ≈Åuç°ÇÃÇΔDZÇÎÅvÇΔèëÇ¢ÇΩDZÇΔÇ…íçà”ǵǃÇ≠ÇæÇ≥Ç¢ÅBåªèÛǙDZǧǻǡǃǢÇÈÇÃÇÕÅAMac OS Ç≈ÇÕÅAÉVÉXÉeÉÄêSëüïîÇÃÉiÉmÉJÅ[ÉlÉãÇÃêßñÒÇ©ÇÁÅAÉXÉåÉbÉhÇ™ê≥ǵÇ≠é¿ëïÇ≈ǴǃǢǻǢÇΩÇflÇ≈Ç∑ÅBMac OS 8 (ï ñºÅuÉuÉãÅ[Åv) ÇÃè´óàÇÃÉoÅ[ÉWÉáÉìÇ≈ÇÕÅAÉiÉmÉJÅ[ÉlÉãÇ™â¸ëPÇ≥ÇÍÇÈÇΩÇflÅAè´óàìIÇ…ÇÕñ{ï®ÇÃÉvÉäÉGÉìÉvÉeÉBÉuÇ»é¿çsä¬ã´Ç™ÉTÉ|Å[ÉgÇ≥ÇÍÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBÇ≥ÇÁÇ…ÅAMac OS X ÇÕÅAå≥Ç©ÇÁñ{ï®ÇÃÉvÉäÉGÉìÉvÉeÉBÉuÉXÉåÉbÉhÇÉTÉ|Å[ÉgǵǃǢÇÈ Mach 3 É}ÉCÉNÉçÉJÅ[ÉlÉãÇ™äÓî’ÇΔÇ»ÇÈó\íËÇ≈ÅAJava ÇÕDZÇÍÇégópǵNjÇ∑ÅB
DZÇÃDZÇΔÇ©ÇÁÅAdžÇÁljÇÈÉlÉCÉeÉBÉuÉÅÉ\ÉbÉhÉRÅ[ÉhÇ≈ïœçXÇ™ïKóvÇ…Ç»ÇÈÇ≈ǵÇÂǧ (Mac OS ÇÃÉRÅ[ÉhÇÕÇ∑Ç◊ǃÅAOS X Çà Carbon API Ç≈ìÆçÏÇ∑ÇÈÇÊǧDžâ¸í˘Ç∑ÇÈïKóvǙdžÇÈÇΩÇflÅADZÇÍÇÕã¡Ç≠DZÇΔÇ≈ÇÕdžÇËÇ‹ÇπÇÒ)ÅBOS X Ç≈ÇÕÅAÉlÉCÉeÉBÉuÉÅÉ\ÉbÉhÇ™ëºÇÃÉXÉåÉbÉhÇ…ÇÊǡǃäÑÇËçûÇ‹ÇÍÇÈâ¬î\ê´Ç™Ç†ÇÈÇΩÇflÅAìØä˙ǙǢǡǪǧèdóvDžǻǡǃǴNjÇ∑ÅBÉfÉxÉçÉbÉpÇÕÅAJava ÉRÅ[ÉhÇ≈çsÇ¡ÇΩÇÃÇΔìØÇ∂ÇÊǧDžÅAÉlÉCÉeÉBÉuÉÅÉ\ÉbÉhÇÃì‡ïîÇ≈LJ LOCK ÇÃéÊìæ/âï˙ÇçsÇÌÇ»ÇØÇÍnjǻÇÁÇ»Ç≠Ç»ÇËÇ‹Ç∑ÅBMac OS X ǙLJǧè≠ǵãÔëÃâªÇµÇΩÇÁÅAìØä˙ÇÃÇΩÇflÇ…Ç«ÇÃÇÊǧǻçÏãΔÇ™ïKóvǩDžǬǢǃè⁄ǵǢèÓïÒÇíÒãüÇ∑ÇÈDZÇΔDžǵNjÇ∑ÅB
ǵÇΩǙǡǃÅAJDirect Ç‹ÇΩÇÕ JNI åoóRÇÃÉcÅ[ÉãÉ{ÉbÉNÉXåƒÇ—èoÇµÇ Mac OS ÇÃè´óàÇÃÉoÅ[ÉWÉáÉìÇ≈é¿ëïÇ≥ÇÍÇΩ Java Ç≈LJìÆçÏÇ≥ÇπÇÈÇΩÇflÇ…ÇÕÅAç°Ç©ÇÁÇΩÇæÇøÇ…Ç∑Ç◊ǃÇÃÉcÅ[ÉãÉ{ÉbÉNÉXåƒÇ—èoÇµÇ LOCK Ç∑ÇÈÇÊǧDžǵǃÇ≠ÇæÇ≥Ç¢ÅBó•ã`Ç…Ç∑Ç◊ÇƒÇ LOCK ǵǃǢÇÈéûä‘ǙǻǢèÍçáÇÕÅAè≠Ç»Ç≠ÇΔLJÅAëÂàÊä¬ã´Ç÷ÇÃä±è¬Ç™ñ‚ëËÇΔÇ»ÇÈàÍòAÇÃÉcÅ[ÉãÉ{ÉbÉNÉXåƒÇ—èoÇµÇæÇØÇÕïKÇ∏ LOCK Ç∑ÇÈÇÊǧDžǵǃÇ≠ÇæÇ≥Ç¢ÅB
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
ÅuLOCK Ç∑ÇÈÅvDZÇΔÇÃäÎåØ
écîOǻǙÇÁÅAÉ}ÉãÉ`ÉXÉåÉbÉhÉvÉçÉOÉâÉ~ÉìÉOÇÃåoå±é“Ç»ÇÁÇæÇÍLJǙåæÇ§ÇÊǧDžÅADZǧǵÇΩìØä˙Ç…ÇÕǪÇÍé©ëÃäÎåØÇ™î∫ǢNjÇ∑ÅBäÓñ{ìIǻLJÇÃÇΔǵǃÇÕÅAêÃÇ©ÇÁímÇÁÇÍÇΩÉfÉbÉhÉçÉbÉNÇΔǢǧñ‚ëËǙdžÇËÇ‹Ç∑ÅB
ÉfÉbÉhÉçÉbÉNDžǬǢǃÇÃä»íPÇ»ê‡ñæ
ÉfÉbÉhÉçÉbÉNÇ™î≠ê∂Ç∑ÇÈÇÃÇÕÅAdžÇÈÉÇÉjÉ^Çï€éùÇ∑ÇÈ (Java Ç≈åæÇ¶ÇŒ synchronized Ç…ã≤Ç‹ÇÍÇΩÉuÉçÉbÉNÇé¿çsíÜÇÃ) džÇÈÉXÉåÉbÉhÇ™ÅAï ÇÃÉXÉåÉbÉhÇ™ï€éùÇ∑ÇÈï ÇÃÉÇÉjÉ^ÇéÊìæÇµÇÊǧÇΔǵǃǮÇËÅAǵǩLJëÊ 2 ÇÃÉXÉåÉbÉhÇÕÅAç≈èâÇÃÉXÉåÉbÉhÇ™ï€éùǵǃǢÇÈÉÇÉjÉ^ÇéÊìæÇµÇÊǧÇΔǵǃÇ∑Ç≈Ç…ÉuÉçÉbÉNǵǃǢÇÈÅAÇΔǢǧèÛë‘DžǻǡÇΩèÍçáÇ≈Ç∑ÅBÇÌÇ©ÇËÇ‚Ç∑Ç≠ǢǢǩǶÇÈÇΔÅudžǻÇΩÇ™éÑÇ…ä êÿÇËÇìnÇ≥ǻǢå¿ÇËä ãlÇflÇìnÇ∑DZÇΔÇÕÇ≈ǴǻǢǙÅAdžǻÇΩÇÕéÑÇ™ä ãlÇflÇìnÇ∑Ç‹Ç≈ä êÿÇËÇìnǪǧÇΔǵǻǢÇÃÇ≈ÅAdžǻÇΩÇ…ä ãlÇflÇìnÇ∑DZÇΔÇÕÇ≈ǴǻǢÅvÇΔǢǧDZÇΔÇ≈Ç∑ÅBDZÇÍÇ≈ÇÕìÒêlÇΔLJêHéñÇ™Ç≈Ç´Ç‹ÇπÇÒÅBJava ÇÃèÍçáÇÕÅAóºï˚ÇÃÉXÉåÉbÉhÇ™âiãvÇ…ÉuÉçÉbÉNǵNjÇ∑ÅB
LOCK ÉIÉuÉWÉFÉNÉgDžǬǢǃLJÅADZÇÃì_Ç≈ÇÕâΩLJì¡ï ǻDZÇΔÇÕdžÇËÇ‹ÇπÇÒÅBLOCK ÇÕëΩêîÇÃìØä˙ëŒè€ÇΔÇ»ÇÈÇΩÇflÅAÉfÉbÉhÉçÉbÉNÇ™ãNDZÇÁǻǢǩì¡Ç…íçà”ÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÉfÉbÉhÉçÉbÉNÇãNDZÇ∑ìTå^ìIÇ»èÛãµÇéüÇ…é¶ÇµÇ‹Ç∑ÅB
public synchronized void foo( ) {
System.out.println("In foo!");
synchronized(Toolbox.LOCK) {
SoundFunctions.SysBeep(1);
}
}
public void bar( ) {
synchronized(Toolbox.LOCK) {
SoundFunctions.SysBeep(1);
foo();
}
}
|
Ç≥ǵÇ≥ÇÌÇËÇÃdžÇÈÉRÅ[ÉhÇ…ÇÕå©Ç¶Ç»Ç¢Ç©Ç‡ÇµÇÍÇ‹ÇπÇÒÇ™ÅAfoo ÇåƒÇ—èoǵÇΩÉXÉåÉbÉhÇ™ println Ç‹Ç≈óàǃäÑÇËçûÇ‹ÇÍÇΩèÍçáÇçlǶǃÇ≠ÇæÇ≥Ç¢ÅBDZDZÇ≈êßå‰ÇÕìØÇ∂ÉIÉuÉWÉFÉNÉgÇà bar ÉÅÉ\ÉbÉhÇ…êÿÇËë÷ÇÌÇËÇ‹Ç∑ÅB2 î‘ñ⁄ÇÃÉXÉåÉbÉhÇÕ bar ÉÅÉ\ÉbÉhÇÃé¿çsÇêiÇflÅAfoo ÇåƒÇ—èoǵNjÇ∑ÅBç≈èâÇÃÉXÉåÉbÉhÇÕÇ∑Ç≈DžǪÇÃÉIÉuÉWÉFÉNÉgÇÃÉÇÉjÉ^Çï€éùǵǃǢÇÈÇΩÇfl (foo Ç≈ìØä˙ÇéÊÇÈÇΩÇfl)ÅA2 î‘ÇflÇÃÉXÉåÉbÉhLJÉuÉçÉbÉNǵNjÇ∑ÅB
ǵnjÇÁÇ≠ǵǃÅAç≈èâÇÃÉXÉåÉbÉhÇ™çƒäJÇ≥ÇÍÅAfoo ÉÅÉ\ÉbÉhÇà synchronized ï∂Ç…ì¸ÇÎǧÇΔǵNjÇ∑ÅBécîOǻǙÇÁÅA2 î‘ñ⁄ÇÃÉXÉåÉbÉhÇ™Ç∑Ç≈Ç… LOCK Çï€éùǵǃǢÇÈÇΩÇflÅAç≈èâÇÃÉXÉåÉbÉhLJÉuÉçÉbÉNǵǃǵNjǢNjÇ∑ÅB
DZÇÍÇ≈óºï˚ÇÃÉXÉåÉbÉhÇ™ÉuÉçÉbÉNǵǃǵNjǢÅAÇ«ÇøÇÁǩǙÉÇÉjÉ^Çâï˙ǵǻǢå¿ÇËÅAÇ«ÇøÇÁÇÃÉXÉåÉbÉhLJêÊÇ÷êiÇfiDZÇΔÇ™Ç≈Ç´Ç‹ÇπÇÒÅBâiãvÇ…ÉfÉbÉhÉçÉbÉNÇ≈Ç∑ÅB
âÒîï˚ñ@
ÉfÉbÉhÉçÉbÉNÇñhÇÆñÕîÕìIÇ»âÒîçÙÇà 1 ǬÇÕÅAÉÇÉjÉ^ÇÃéÊìæÇèÌÇ…ìØÇ∂èáèòÇ≈çsǧDZÇΔÇ≈Ç∑ÅBè„ÇÃÉTÉìÉvÉãÇ≈ÉfÉbÉhÉçÉbÉNÇ™ãNDZÇÈå¥àˆÇÕÅAç≈èâÇÃÉXÉåÉbÉhÇ™êÊÇ…ÅAéÛÇØéÊÇ¡ÇΩÉIÉuÉWÉFÉNÉgÇÃÉçÉbÉNÇéÊìæÇµÇƒÇ©ÇÁÅAÉcÅ[ÉãÉ{ÉbÉNÉXÇà LOCK ÇéÊìæÇµÇƒÇ¢ÇÈÇÃÇ…ëŒÇµÇƒÅA2 î‘ñ⁄ÇÃÉXÉåÉbÉhÇÕãtÇÃèáèòÇ≈ÉçÉbÉNÇéÊìæÇ∑ÇÈÇΩÇflÇ≈Ç∑ÅB
ÇÌÇÍÇÌÇÍÇÃÉRÅ[ÉhÇ≈ÇÕÅAÉÇÉjÉ^ÇÃéÊìæèáèòÇΔǵǃÅAèÌÇ… LOCK ÇàÍî‘ç≈å„Ç…éÊìæÇ∑ÇÈÅAÇΔǢǧï˚êjÇéÊÇËNjǵÇΩÅBJava åæåÍÇ≈åæÇ§ÇΔÅALOCK Ç…ìØä˙ǵǃǢÇÈä‘ÇÕÅAëºÇÃâΩǩDžìØä˙ǵÇΩÇËÅAëºÇÃâΩǩDžìØä˙Ç∑ÇÈÉÅÉ\ÉbÉhÇåƒÇ—èoǵǃÇÕÇ»ÇÁǻǢÇΔǢǧDZÇΔÇ≈Ç∑ÅB(è„ÇÃÉTÉìÉvÉãÇ≈ÇÕÅAbar ÉÅÉ\ÉbÉhÇ™ foo ÇåƒÇ—èoÇ∑ÇΔǴDžDZÇÃÉãÅ[ÉãÇ™îjÇÁÇÍǃǢNjÇ∑ÅBç≈ó«ÇÃâåàñ@ÇÕ foo Ç÷ÇÃåƒÇ—èoǵÇìØä˙ÉuÉçÉbÉNÇÃäOÇ…à⁄Ç∑DZÇΔÇ≈ǵÇÂǧÅB)
ãÔëÃìIÇ…åæÇ§ÇΔÅADZÇÃïKëRÇÃåãâ ÇΔǵǃÅALOCK Çï€éùǵǃǢÇÈä‘ÇÕ AWT ÇåƒÇ—èoǵǃÇÕÇ»ÇÁǻǢÇΔǢǧDZÇΔÇ™èdóvÇ…Ç»ÇËÇ‹Ç∑ÅBDZÇÍÇÕÅApublic Ç» AWT ÉÅÉ\ÉbÉhÇÕÇ‡ÇøÇÁÇÒÅAǪÇÍÇÁÇ™åƒÇ—èoÇ∑ private Ç»ÉsÉAÉNÉâÉXLJÅAëΩêîÇÃìØä˙ÇçsǧÇΩÇflÇ≈Ç∑ÅB
ǧNjÇ≠DZǻÇπÇÈÇΔÇ®ä¥Ç∂ÇÃèÍçáÇÕÅAè„ãLÇÃãKë•Ç…ëΩè≠ÇÃó·äOÇê›ÇØÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBdžÇÈÉIÉuÉWÉFÉNÉgÇ…ìØä˙ǵǃǢÇÈä‘ÅAåàǵǃ LOCK ÇçsÇÌǻǢDZÇΔÇ™ÇÌǩǡǃǢÇÈèÍçáÇÕÅALOCK ǵÇΩÉuÉçÉbÉNÇ©ÇÁǪÇÃÉIÉuÉWÉFÉNÉgÇ…ìØä˙Ç∑ÇÈÉÅÉ\ÉbÉhÇåƒÇ—èoǵǃLJǩNjǢNjÇπÇÒÅBó·Ç¶ÇŒÅAVector ÉIÉuÉWÉFÉNÉgÇÃëÂîºÇÃÉÅÉ\ÉbÉhÇÕìØä˙ÇçsǢNjÇ∑Ç™ÅALOCK Ç≥ÇÍÇΩÉuÉçÉbÉNì‡Ç©ÇÁ Vector ÉIÉuÉWÉFÉNÉgÇÃÉÅÉ\ÉbÉhÇåƒÇ—èoǵǃLJëÂè‰ïvÇ≈ǵÇÂǧÅBǟǩDžǪÇà Vector Ç…ìØä˙ÇéÊÇÈÉRÅ[ÉhǙdžÇÈâ¬î\ê´Ç™îÒèÌÇ…è≠ǻǢǩÇÁÇ≈Ç∑ÅB
DZÇÃåãâ ÅAéüÇÃÇÊǧǻÉvÉçÉOÉâÉ~ÉìÉOÉXÉ^ÉCÉãÇ™ì±Ç´èoÇ≥ÇÍÇ‹Ç∑ÅBLOCK ÇÃÉuÉçÉbÉNÇÉcÅ[ÉãÉ{ÉbÉNÉXåƒÇ—èoǵDžÇ≈Ç´ÇÈÇæÇØÇ´Ç¬Ç≠îÌÇπÇÈï˚éÆÇ≈Ç∑ÅBÇ‹Ç∏ÉcÅ[ÉãÉ{ÉbÉNÉXÇåƒÇ—èoǵǃÅAéüÇ… Java Ç≈ëºÇÃèàóùÇçsÇ¢ÅAǪÇÍÇ©ÇÁLJǧàÍìxÉcÅ[ÉãÉ{ÉbÉNÉXÇåƒÇ—èoÇ∑ïKóvÇÃdžÇÈÉÅÉ\ÉbÉhǙdžÇÈÇΔǵNjÇ∑ÅBDZÇÃèÍçáÅAÉÅÉ\ÉbÉhëSëÃÇ LOCK ǵǃÇÕÇ¢ÇØÇ‹ÇπÇÒÅBǪǧÇ≈ÇÕÇ»Ç≠ÅAÉcÅ[ÉãÉ{ÉbÉNÉXÇåƒÇ—èoÇ∑ç≈èâÇÃÉOÉãÅ[ÉvÇΔ 2 î‘ñ⁄ÇÃÉOÉãÅ[ÉvÇǪÇÍǺÇÍìΔóßÇ… LOCK ǵÅAǪÇÃä‘ÇÃèàóùÇÕ LOCK ÉuÉçÉbÉNÇ…ÇÕì¸ÇÍÇ‹ÇπÇÒÅBDZǧǻÇÈÇΔÅAç≈èâÇÃÉOÉãÅ[ÉvÇΔ 2 î‘ñ⁄ÇÃÉOÉãÅ[ÉvÇΔÇ≈ÇÕëÂàÊìIÇ»èÛë‘Ç™ïœâªÇ∑ÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBïœçXÇ≥ÇÍǃÇÕç¢ÇÈèÍçáÇÕÅA2 î‘ñ⁄ÇÃÉOÉãÅ[ÉvÇÃêÊì™Ç≈èÛë‘Çê›íËǵíºÇ∑Ç©ÅAâΩÇΔÇ© 2 ǬÇÃÉOÉãÅ[ÉvÇ 1 ǬDžNjÇΔÇflǃÅAä‘Çà Java ÉRÅ[ÉhÇëOÇ©å„ÇÎÇ…í«Ç¢èoÇπÇÈÇÊǧÅAÉRÅ[ÉhÇÃèáèòÇïœÇ¶ÇÈDZÇΔÇ™Ç≈ǴǻǢǩåüì¢ÇµÇƒÇ›ÇÈDZÇΔÇ≈Ç∑ÅB
ÉfÉbÉhÉçÉbÉNÇÃÉfÉoÉbÉO
ÇÌÇÍÇÌÇÍÇÕ MRJ äJî≠ÇÃç€Ç…Ç–Ç«Ç≠ÉfÉbÉhÉçÉbÉNÇ…îYÇ‹Ç≥ÇÍÇΩÇΩÇflÅAÉfÉbÉhÉçÉbÉNÇÃÉfÉoÉbÉOÉTÉ|Å[ÉgÇ MRJ VM Ç…í«â¡ÇµÇ‹ÇµÇΩÅB
Ç‹Ç∏ÅAMRJLib ÇÃÉfÉoÉbÉOÉrÉãÉhÇ≈ÇÕÅAÉXÉåÉbÉhÉXÉPÉWÉÖÅ[ÉâÇ…ÉfÉbÉhÉçÉbÉNåüímã@î\Çì¸ÇÍNjǵÇΩÅBDZÇÃã@î\ÇÕÅAè„ãLÇ≈ê‡ñæÇµÇΩìTå^ìIÇ»ÉfÉbÉhÉçÉbÉNÇÃÉPÅ[ÉXÇåüímÇ∑ÇÈLJÇÃÇ≈ÅAÉfÉbÉhÉçÉbÉNÇåüímÇ∑ÇÈÇΔÅAǪÇÍÇí ímÇ∑ÇÈÉÜÅ[ÉUÉuÉåÉCÉNÇ≈ë¶ç¿Ç… MacsBug Ç…ì¸ÇËÇ‹Ç∑ÅBǪÇÍà»å„ÇÕÅAà»â∫Ç≈ê‡ñæÇ∑ÇÈÉeÉNÉjÉbÉNÇégǡǃè⁄ǵǢèÓïÒÇìæÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB(DZÇÃÉfÉoÉbÉOÉrÉãÉhÇÕ MRJ 2.1 SDK Ç…ïtëÆÇµÇ‹Ç∑ÅBÉCÉìÉXÉgÅ[Éãï˚ñ@Ç‚è⁄ç◊éñçÄDžǬǢǃÇÕÅAïtëÆÇà Read-Me ÉtÉ@ÉCÉãÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB)
í èÌÇÃç≈ìKâªÉrÉãÉhÇà MRJLib Ç≈LJÅAMRJ Çà 'dcmd' Ç™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÍÇŒÅAMacsBug ÇégópǵÅA 'mrj dl' Ç®ÇÊÇ— 'mrj sync' ÉRÉ}ÉìÉhÇ≈ÅAåªç›ÉfÉbÉhÉçÉbÉNÇ‹ÇΩÇÕÉfÉbÉhÉçÉbÉNÇ…ãflÇ¢ìØä˙ÇÃñ‚ëËÇ™ãNDZǡǃǢÇÈÇ©Çí≤Ç◊ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBDZÇà 2 ǬÇÃÉRÉ}ÉìÉhÇÕÅAñ‚ëËÇÃÉXÉåÉbÉhÇ‚ÉIÉuÉWÉFÉNÉgÇÃèÓïÒÇï\é¶ÇµÇ‹Ç∑ÅB( 'dcmd' ÇÕ MRJ 2.1 SDK Ç…ïtëÆÇµÇ‹Ç∑ÅBè⁄ç◊èÓïÒÇΔãÔëÃìIÇ»ÉRÉ}ÉìÉhÇÃópñ@DžǬǢǃÇÕÅAïtëÆÇà Read-Me ÉtÉ@ÉCÉãÇΔÅuTechnote 1154: MacsBug Ç≈ Java ÉRÅ[ÉhÇÉfÉoÉbÉOÇ∑ÇÈï˚ñ@ÅvÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB)
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
éQçlï∂å£
- ÅuTechnote 1154: MacsBug Ç≈ Java ÉRÅ[ÉhÇÉfÉoÉbÉOÇ∑ÇÈï˚ñ@Åv
- ÅuUsing JDirect To Access MacOS Code From JavaÅv
JDirect ÇÃä»íPÇ»éËà¯Ç´ÅBMRJ 2.1 SDK ÇÃÅudocsÅvÉtÉHÉãÉ_Ç…é˚ò^ÅB
- OaksÅAScottÅAWong íòÅwJava ThreadsÅxO'Reilly äßÅB1997 îNÅB
O'Reilly ÇÃóDÇÍÇΩèëê–Ç≈ÅAJava ÇÃÉ}ÉãÉ`ÉXÉåÉbÉhÇ®ÇÊÇ—ÉXÉåÉbÉhÇÃéËà¯èëÇΔǵǃç≈ìKÅBèâêSé“Ç™ì«Ç›Ç‚Ç∑Ç≠èëÇ©ÇÍǃǢÇÈÇ™ÅAè„ãâÉÜÅ[ÉUÇÃÇΩÇflÇ…Ç»ÇÈçÄñ⁄LJåfç⁄ÅB
- LeaÅADoug íòÅwConcurrent Programming in Java: Design Principles and PatternsÅxAddison-Wesley äßÅB1997 îNÅB
îÒèÌÇ…óDÇÍÇΩÅAì‡óeÇÃè[é¿ÇµÇΩèëê–ÇæÇ™ÅAÉAÉJÉfÉ~ÉbÉNÇ»ÇΩÇflLJǃdžNjÇ∑ì«é“LJǢÇÈǩLJǵÇÍÇ‹ÇπÇÒÅBé¿ÇÕéÑé©êgÇ‹ÇæëSïîì«Ç›Ç´Ç¡ÇƒÇ¢Ç‹ÇπÇÒÅB
êÊì™ÉyÅ[ÉWÇ…ñflÇÈ
|